import 'package:flutter/material.dart';
import 'dart:math' as math;
import 'dart:ui'; // 为了使用Canvas和Paint类

class RocketPainter extends CustomPainter {
  final double progress; // 动画进度，用于控制火箭的绘制位置和火焰的大小等。

  RocketPainter(this.progress);

  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()..color = Colors.red; // 火箭颜色
    final bodyWidth = size.width * 0.8; // 火箭主体宽度，可根据需要调整比例。
    final bodyHeight = size.height * 0.8; // 火箭主体高度，可根据需要调整比例。
    final flameHeight = size.height * progress * 0.1; // 火焰高度，根据动画进度动态变化。
    final flameWidth = size.width * progress * 0.2; // 火焰宽度，根据动画进度动态变化。
    final bodyPath = Path() // 绘制火箭主体路径。
      ..moveTo(size.width / 2, size.height * (1 - progress)) // 起始点在底部，随动画上升。
      ..lineTo(size.width / 2 - bodyWidth / 2, size.height * (1 - progress) - bodyHeight) // 左半部分。
      ..lineTo(size.width / 2 + bodyWidth / 2, size.height * (1 - progress) - bodyHeight) // 右半部分。
      ..close(); // 闭合路径。
    canvas.drawPath(bodyPath, paint); // 绘制火箭主体。
    // 绘制火焰（简化示例）
    final flamePaint = Paint()..color = Colors.orange; // 火焰颜色。
    final flamePath = Path() // 绘制火焰路径。简化处理，实际应用中可能需要更复杂的形状。
      ..addOval(Rect.fromCircle(center: Offset(size.width / 2, size.height * (1 - progress) - bodyHeight - flameHeight), radius: flameWidth / 2)); // 火焰形状。
    canvas.drawPath(flamePath, flamePaint); // 绘制火焰。
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return true; // 当动画值改变时，需要重新绘制。
  }
}